Skip to main content

Platform API Reference

The Platform API provides wells, assets, programs, pads, rigs, drillout units, and frac fleets. Use it to discover the IDs and relationships needed for Data API queries.

Base URL: https://api.corva.ai

All examples accept either an API key or a Bearer token:

Authorization: API YOUR_API_KEY
Authorization: Bearer YOUR_JWT
Maintained reference

The parameters and examples below are verified against the current Platform API implementation. The interactive API explorer is useful for discovery, but its generated descriptions or examples may lag behind the service.

Finding wells: /v2/wells or /v2/assets

Corva exposes two synchronized views of a well. Choose the endpoint based on the job, and note that the asset ID appears in a different place.

EndpointRecommended useID used by Data API
GET /v2/wellsNew well-focused integrations; lifecycle status/state; direct program, pad, rig, frac-fleet, and drillout-unit filters and relationships.data[].attributes.asset_id
GET /v2/assets?types[]=wellMixed program/rig/well search; legacy parent/child hierarchy; exact api_number lookup.Top-level data[].id

The top-level ID returned by /v2/wells identifies the normalized Well record. Do not pass it to the Data API unless it happens to equal attributes.asset_id. See Find Wells and Asset IDs for complete examples of both approaches.

Response format

List endpoints return JSON:API-style resources under data. Each resource contains its platform id, type, attributes, and, when requested by the serializer, relationships or included resources.

{
"data": [
{
"id": 67890,
"type": "well",
"attributes": {
"name": "Example Well",
"asset_id": 12345,
"status": "active"
},
"relationships": {
"company": { "data": { "id": 100, "type": "company" } }
}
}
]
}

The exact attributes depend on the endpoint and fields[] selection. Treat unrequested fields as optional.

Shared list parameters

Most asset list endpoints support these controls. Endpoint-specific filters are documented in the sections below.

ParameterTypeRequiredDescription
ids[]integer[]NoReturn only the listed resource IDs. Repeat the parameter for multiple values.
companyintegerNoFilter by company ID. /v2/assets uses company_id instead.
fields[]string[]NoReturn selected fields, for example fields[]=well.name. Repeat for multiple fields.
per_pageintegerNoNumber of records returned per page. Always set this explicitly for exports.
pageintegerNoPage number where supported. Follow pagination metadata instead of assuming one response contains every record.
sortstringNoSort field or comma-separated fields. A leading - requests descending order where supported.
orderasc or descNoSorting direction. Defaults to asc on the endpoints below.
active_beforedatetimeNoReturn resources with last_active_at before the value.
active_afterdatetimeNoReturn resources with last_active_at at or after the value.

Geographic bounding-box filters require all four parameters together: lat_start, lat_end, long_start, and long_end.

List wells

GET/v2/wells

Use this endpoint to locate a well and obtain the asset_id used in Data API records.

Parameters

ParameterTypeRequiredDescription
ids[]integer[]NoWell platform IDs.
asset_idintegerNoDataset asset ID. For multiple exact values, repeat asset_id[].
companyintegerNoCompany ID.
programintegerNoProgram ID.
padintegerNoPad ID.
drillout_unitintegerNoDrillout unit ID.
frac_fleetintegerNoFrac fleet ID.
statusstringNoWell status.
statestringNoWell lifecycle state.
visibilitystringNoWell visibility.
identifierstringNoExact well identifier.
areastringNoWell area.
searchstringNoSearch by well name.
fields[]string[]NoSparse response fields, such as well.name and well.asset_id.
last_active_drilling_beforedatetimeNoLast drilling activity before the value.
last_active_drilling_afterdatetimeNoLast drilling activity at or after the value.
well_start_beforeintegerNoWell start before this Unix timestamp in seconds.
well_start_afterintegerNoWell start after this Unix timestamp in seconds.
per_pageintegerNoWells per page.
sortstringNoOne of company, rig, program, name, status, visibility, identifier, or last_active_at.
orderstringNoasc or desc.

The endpoint also supports specialized stream-completion, location, archiving, and intervention filters. Use those only when the workflow requires them.

Example

curl --get 'https://api.corva.ai/v2/wells' \
--header "Authorization: API ${CORVA_API_KEY}" \
--data-urlencode 'visibility=visible' \
--data-urlencode 'per_page=25' \
--data-urlencode 'sort=name' \
--data-urlencode 'fields[]=well.name' \
--data-urlencode 'fields[]=well.asset_id' \
--data-urlencode 'fields[]=well.status'
response = requests.get(
"https://api.corva.ai/v2/wells",
headers={"Authorization": authorization},
params={
"visibility": "visible",
"per_page": 25,
"sort": "name",
"fields[]": ["well.name", "well.asset_id", "well.status"],
},
timeout=30,
)
response.raise_for_status()
wells = response.json()["data"]

For an end-to-end walkthrough, see Find Wells and Asset IDs.

List assets

GET/v2/assets

Use the general assets endpoint when a workflow must search across multiple asset types, traverse the parent/child asset hierarchy, or find a well by an exact API number. For well-focused workflows, prefer /v2/wells.

ParameterTypeRequiredDescription
types[]string[]NoAsset types: program, rig, or well.
ids[]integer[]NoAsset IDs.
statusstringNoactive, idle, paused, complete, or deleting.
visibilitystringNovisible, visible_to_admin, or deleted.
programintegerNoProgram ID.
parent_asset_idintegerNoParent asset ID.
api_number or api_number[]stringNoOne or more API numbers. Dashes are ignored.
searchstringNoSearch by asset ID, name, API number, or customer well ID.
company_idintegerNoCompany ID.
start, endintegerNoUnix timestamp range.
fields[]string[]NoSparse response fields, such as asset.name.
per_pageintegerNoAssets per page.
sortstringNoname, last_active_at, status, rig, program, well, company, or well_end.
orderstringNoasc or desc.
curl --get 'https://api.corva.ai/v2/assets' \
--header "Authorization: API ${CORVA_API_KEY}" \
--data-urlencode 'types[]=well' \
--data-urlencode 'api_number=42-501-20130' \
--data-urlencode 'per_page=25'

List programs

GET/v2/programs
ParameterTypeDescription
ids[]integer[]Program IDs.
companyintegerCompany ID.
namestringProgram name.
fields[]string[]Sparse response fields, such as program.name.
per_pageintegerPrograms per page.
sortstringname or company; default name.
orderstringasc or desc.
curl --get 'https://api.corva.ai/v2/programs' \
--header "Authorization: API ${CORVA_API_KEY}" \
--data-urlencode 'name=Delaware Basin' \
--data-urlencode 'fields[]=program.name' \
--data-urlencode 'per_page=25'

List pads

GET/v2/pads
ParameterTypeDescription
ids[]integer[]Pad IDs.
companyintegerCompany ID.
programintegerProgram ID.
frac_fleetintegerRelated frac fleet ID.
current_frac_fleetintegerFrac fleet ID for which the pad is current.
drillout_unitintegerRelated drillout unit ID.
well_ids[]integer[]Pads containing any listed well IDs.
searchstringSearch by pad name.
activebooleanPads with an active well.
currentbooleanCurrent pads based on the pad/frac-fleet relationship.
fields[]string[]Sparse response fields, such as pad.name.
page, per_pageintegerPagination controls.
sortstringname, company, program, drillout_unit, or last_active_at.
orderstringasc or desc.
curl --get 'https://api.corva.ai/v2/pads' \
--header "Authorization: API ${CORVA_API_KEY}" \
--data-urlencode 'program=9001' \
--data-urlencode 'active=true' \
--data-urlencode 'fields[]=pad.name' \
--data-urlencode 'per_page=25'

List rigs

GET/v2/rigs
ParameterTypeDescription
ids[]integer[]Rig IDs.
companyintegerCompany ID.
programintegerProgram ID.
active_wellintegerActive well ID.
has_active_wellintegerReturn rigs that have an active well.
searchstringSearch by rig name.
app_keystringRigs associated with a product subscription containing this app.
activestringReturn records with an active well.
fields[]string[]Sparse response fields, such as rig.name.
per_pageintegerRigs per page.
sortstringname, program, company, or last_active_at.
orderstringasc or desc.
curl --get 'https://api.corva.ai/v2/rigs' \
--header "Authorization: API ${CORVA_API_KEY}" \
--data-urlencode 'has_active_well=1' \
--data-urlencode 'fields[]=rig.name' \
--data-urlencode 'per_page=25'

List drillout units

GET/v2/drillout_units
ParameterTypeDescription
ids[]integer[]Drillout unit IDs.
companyintegerCompany ID.
programintegerProgram ID.
padintegerPad ID.
wellintegerWell ID.
searchstringSearch by drillout unit name.
app_keystringUnits associated with a product subscription containing this app.
activestringReturn records with an active well.
fields[]string[]Sparse response fields, such as drillout_unit.name.
per_pageintegerUnits per page.
sortstringname, program, company, pad, well, or last_active_at.
orderstringasc or desc.
curl --get 'https://api.corva.ai/v2/drillout_units' \
--header "Authorization: API ${CORVA_API_KEY}" \
--data-urlencode 'pad=7001' \
--data-urlencode 'fields[]=drillout_unit.name' \
--data-urlencode 'per_page=25'

List frac fleets

GET/v2/frac_fleets
ParameterTypeDescription
ids[]integer[]Frac fleet IDs.
companyintegerCompany ID.
programintegerProgram ID.
padintegerRelated pad ID.
current_padintegerPad ID currently assigned to the fleet.
searchstringSearch by frac fleet name.
app_keystringFleets associated with a product subscription containing this app.
activestringReturn records with an active well.
fields[]string[]Sparse response fields, such as frac_fleet.name.
per_pageintegerFleets per page.
sortstringname, company, or last_active_at.
orderstringasc or desc.
curl --get 'https://api.corva.ai/v2/frac_fleets' \
--header "Authorization: API ${CORVA_API_KEY}" \
--data-urlencode 'current_pad=7001' \
--data-urlencode 'fields[]=frac_fleet.name' \
--data-urlencode 'per_page=25'

Single-resource requests

Each resource also has a GET /v2/{resource}/{id} endpoint. Supply fields[] when you only need selected attributes.

curl --get 'https://api.corva.ai/v2/wells/67890' \
--header "Authorization: API ${CORVA_API_KEY}" \
--data-urlencode 'fields[]=well.name' \
--data-urlencode 'fields[]=well.asset_id'

Troubleshooting

ResultWhat to check
Empty dataFilters, company/resource access, and pagination. An empty result is not an authentication failure.
Missing wellIncrease per_page or follow pages; confirm visibility, lifecycle filters, and exact asset_id[] syntax.
Missing attributeRemove fields[] temporarily or request the serializer field explicitly.
401Header format, API key status, and Bearer expiry.
403API-key permissions or the Bearer user's resource permissions.

The interactive Platform API explorer remains available for endpoints not yet covered here.